summaryrefslogtreecommitdiff
path: root/src/app/(main)/og/[...slug]/route.tsx
diff options
context:
space:
mode:
authorBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:15:04 +0800
committerBertrand Yuan <bert.yuan@outlook.com>2025-12-16 00:15:04 +0800
commit785371bb3eccca455e5ce5fccbe9b6e3752a03f6 (patch)
treedd006593448c3500bdcb414af3b4656f7a7683d4 /src/app/(main)/og/[...slug]/route.tsx
parent02ae938c238c9d18448d17a8ec92c0edd8c17463 (diff)
fix(front-end): bug in viewing posts
Diffstat (limited to 'src/app/(main)/og/[...slug]/route.tsx')
-rw-r--r--src/app/(main)/og/[...slug]/route.tsx48
1 files changed, 31 insertions, 17 deletions
diff --git a/src/app/(main)/og/[...slug]/route.tsx b/src/app/(main)/og/[...slug]/route.tsx
index d713923..77ae7f8 100644
--- a/src/app/(main)/og/[...slug]/route.tsx
+++ b/src/app/(main)/og/[...slug]/route.tsx
@@ -1,6 +1,7 @@
import { generateOGImage } from '@/app/(main)/og/[...slug]/og';
-import { metadataImage } from '@/lib/metadata-image';
+import { getPostBySlug, getAllPostSlugs } from '@/lib/payload-posts';
import type { ImageResponse } from 'next/og';
+import { notFound } from 'next/navigation';
async function loadAssets(): Promise<
{ name: string; data: Buffer; weight: 400 | 600; style: 'normal' }[]
@@ -39,20 +40,33 @@ async function loadAssets(): Promise<
];
}
-export const GET = metadataImage.createAPI(
- async (page): Promise<ImageResponse> => {
- const [fonts] = await Promise.all([loadAssets()]);
-
- return generateOGImage({
- title: page.data.title,
- description: page.data.description,
- fonts,
- });
- },
-);
-
-export function generateStaticParams(): {
- slug: string[];
-}[] {
- return metadataImage.generateParams();
+export async function GET(
+ request: Request,
+ { params }: { params: Promise<{ slug: string[] }> }
+): Promise<ImageResponse> {
+ const { slug } = await params;
+ const postSlug = slug[0];
+
+ if (!postSlug) {
+ notFound();
+ }
+
+ const post = await getPostBySlug(postSlug);
+
+ if (!post) {
+ notFound();
+ }
+
+ const fonts = await loadAssets();
+
+ return generateOGImage({
+ title: post.title,
+ description: post.description,
+ fonts,
+ });
+}
+
+export async function generateStaticParams(): Promise<{ slug: string[] }[]> {
+ const slugs = await getAllPostSlugs();
+ return slugs.map((slug) => ({ slug: [slug, 'image.png'] }));
}